var express = require('express');
var router = express.Router();
const tools = require("../tools/index")
const rn = require("randomnumber")

const user = require("../sql/user")
const sql = require("../sql/sql")
const uuid = require("uuid")
const md5 = require("md5")

/* GET home page. */
router.get('/', function(req, res, next) {
    let token = req.headers.token;
    
    tools.verify(token).then(result=>{
        res.send({
            code: 200,
            title: "登录成功"
        })
    }).catch(err=>{
        res.send({
            code: 400,
            title: "登录失效"
        })
    })
});

/**
* @apiGroup 用户信息
* @api {get} /api/user/sendSmS 发送短信验证码
* @apiVersion 0.0.0
* @apiDescription 发送短信验证码
* @apiParam {Number} tel 要发送短信验证码的手机号
* @apiSuccess {number} code 请求状态
* @apiSuccess {string} msg 请求说明
* @apiSuccess {array} data 请求数据
* @apiSuccessExample {json} Success-Response:
res.send({
    code:1,
    msg:"请求成功",
    data:[{},{},{},....]
})
* @apiError {number} code 请求状态
* @apiError {string} msg 请求说明
* @apiError {object} data 请求数据
* @apiErrorExample {json} Error-Response:
res.send({
    code:0,
    msg:"请求失败",
    data:错误对象
})
* @apiSampleRequest http://localhost:3000/api/user/sendSmS
*/


// 发送短信验证码
router.get('/sendSmS', function(req, res, next) {
    let tel = req.query.tel
    let code = rn.generate(6);

    sql.get(user, {tel:tel}).then(data=>{
        if(data.length>0){
            // 判断用户名是否存在
            if(data[0].userName){
                // 手机号已被注册
                res.send({
                    code:3,
                    title:"手机号已被注册",
                    data:"not found"
                })
            }else{
                // 重新发短信验证码
                tools.sendSmS(tel, code).then(()=>{
                    sql.set(user,{tel},{$set:{code}}).then(()=>{
                        res.send({
                            code:1,
                            title:"重新发送成功",
                            data:code       // 为了测试，上线之前，要删除
                        })
                    })
    
                })
            }
        }else{
            // 第一次直接发
            tools.sendSmS(tel, code).then(()=>{
                sql.add(user, {
                    tel:tel,
                    code:code
                }).then(()=>{
                    res.send({
                        code:1,
                        title:"第一次发送成功",
                        data:code       // 为了测试，上线之前，要删除
                    })
                })
            })
        }
    })

});




/**
* @apiGroup 用户信息
* @api {post} /api/user/register 注册
* @apiVersion 0.0.0
* @apiDescription 注册
* @apiParam {String} username 用户名
* @apiParam {String} password 密码
* @apiParam {String} tel 手机号
* @apiParam {String} code 验证码
* @apiSuccess {number} code 请求状态
* @apiSuccess {string} msg 请求说明
* @apiSuccess {array} data 请求数据
* @apiSuccessExample {json} Success-Response:
res.send({
    code:1,
    msg:"请求成功",
    data:[{},{},{},....]
})
* @apiError {number} code 请求状态
* @apiError {string} msg 请求说明
* @apiError {object} data 请求数据
* @apiErrorExample {json} Error-Response:
res.send({
    code:0,
    msg:"请先发送验证码",
    data:错误对象
})
res.send({
    code:2,
    msg:"验证码错误",
    data:错误对象
})
res.send({
    code:3,
    msg:"一个手机号只能注册一个账号",
    data:错误对象
})
res.send({
    code:4,
    title:"用户名重复",
    data:"no data"
})
* @apiSampleRequest http://localhost:3000/api/user/register
*/
// 注册功能
router.post('/register', function(req, res, next) {
    let tel = req.body.tel;
    let un = req.body.username;
    let pw = req.body.password;
    let code = req.body.code;
    
    // 先查找用户名
    sql.get(user, {userName:un}).then(data=>{
        if(data.length > 0){
            // 存在，提示，用户名重复
            res.send({
                code:4,
                title:"用户名重复",
                data:"no data"
            })
        }else{
            // 不存在重复用户名，查找手机号
            sql.get(user,{tel}).then(data=>{
                if(data.length > 0){
                    // 有，验证验证码是否正确
                    if(data[0].code === code){
                        // 正确，验证用户名是否存在
                        if(data[0].userName){
                            // 存在，提示，一个手机号只能注册一个账号
                            res.send({
                                code:3,
                                title:"一个手机号只能注册一个账号",
                                data:"no data"
                            })
                        }else{
                            // 不存在，可以注册
                            sql.set(user,{tel},{$set:{
                                userName:un,
                                passWord:md5(pw),
                                regTime:Date.now(),
                                userId: "userid" + uuid.v1()
                            }}).then(()=>{
                                res.send({
                                    code:1,
                                    title:"注册成功",
                                    data:"no data"
                                })
                            })
                        }
                    }else{
                        // 不正确，提示验证码不正确
                        res.send({
                            code:2,
                            title:"验证码错误",
                            data:"no data"
                        })
                    }
                }else{
                    // 没有，请先发送验证码
                    res.send({
                        code:0,
                        title:"请先发送验证码",
                        data:"no data"
                    })
                }
            })
        }
    })
});



/**
* @apiGroup 用户信息
* @api {get} /api/user/login 登录
* @apiVersion 0.0.0
* @apiDescription 登录
* @apiParam {String} username 用户名
* @apiParam {String} tel 手机号
* @apiParam {String} password 密码
* @apiSuccess {number} code 请求状态
* @apiSuccess {string} msg 请求说明
* @apiSuccess {array} data 请求数据
* @apiSuccessExample {json} Success-Response:
res.send({
    code:1,
    msg:"登录成功",
    data:[{},{},{},....]
})
* @apiError {number} code 请求状态
* @apiError {string} msg 请求说明
* @apiError {object} data 请求数据
* @apiErrorExample {json} Error-Response:
res.send({
    code:0,
    msg:"用户名或手机号不存在",
    data:错误对象
})
res.send({
    code:2,
    msg:"密码错误",
    data:错误对象
})
* @apiSampleRequest http://localhost:3000/api/user/login
*/

// 登录
router.get('/login', function(req, res, next) {
    let tel = req.query.tel;
    let un = req.query.username;
    let pw = req.query.password;

    sql.get(user,{$or:[{userName:un},{tel:tel}]}).then(data=>{
        if(data.length > 0){
            if(data[0].passWord === md5(pw)){
                // 生成token
                const token = tools.sign({
                    userId: data[0].userId,
                    a:"哈哈哈"
                }, 60 * 30)
                sql.set(user, {userName:un, tel}, {$set: {
                    lastTime: Date.now(),
                    loginState: 1
                }}).then(()=>{
                    res.send({
                        code:1,
                        title:"登录成功",
                        data:"no data",
                        token
                    })
                })
            }else{
                res.send({
                    code:2,
                    title:"密码不对",
                    data:"no data"
                })
            }
        }else{
            res.send({
                code:0,
                title:"用户名或手机号不存在",
                data:"no data"
            })
        }
    })
});




/**
* @apiGroup 用户信息
* @api {get} /api/user/get 获取用户信息
* @apiVersion 0.0.0
* @apiDescription 获取用户信息
* @apiParam {String} token 登录成功之后，后端颁发的令牌
* @apiSuccess {number} code 请求状态
* @apiSuccess {string} msg 请求说明
* @apiSuccess {array} data 请求数据
* @apiSuccessExample {json} Success-Response:
res.send({
    code:1,
    msg:"登录成功",
    data:[{},{},{},....]
})
* @apiError {number} code 请求状态
* @apiError {string} msg 请求说明
* @apiError {object} data 请求数据
* @apiErrorExample {json} Error-Response:
res.send({
    code:0,
    msg:"用户名或手机号不存在",
    data:错误对象
})
* @apiSampleRequest http://localhost:3000/api/user/get
*/

// 获取个人信息
router.get('/get', function(req, res, next) {
    let token = req.headers.token;

    // 验证token
    tools.verify(token).then(result=>{
        // 验证成功
        sql.get(user,{userId: result.userId}).then(data=>{
            res.send({
                code:1,
                titke:"获取成功",
                data:data[0],
                token:result
            })
        })
    }).catch(err=>{
        // 验证失败
        res.send({
            code: 400,
            title: "登录失效，请重新登录",
            data: err
        })
    })

    // jwt.verify(token, "千锋H5，前端界的扛把子", (err, result)=>{
    //     if(err){
    //         // 验证失败
    //         res.send({
    //             code: 400,
    //             title: "登录失效，请重新登录",
    //             data: err
    //         })
    //     }else{
    //         // 验证成功
    //         sql.get(user,{userId: result.userId}).then(data=>{
    //             res.send({
    //                 code:1,
    //                 titke:"获取成功",
    //                 data:data[0],
    //                 token:result
    //             })
    //         })
    //     }
    // })
})



// 修改头像
router.post('/setAvatar', function(req, res, next) {
    let token = req.headers.token;
    let avatar = req.body.avatar;
    // 验证token
    tools.verify(token).then(result=>{
        // 验证成功
        sql.set(user,{userId: result.userId},{$set:{
            avatar
        }}).then(()=>{
            res.send({
                code:1,
                titke:"修改头像成功",
                data:"NOT DATA"
            })
        })
    }).catch(err=>{
        // 验证失败
        res.send({
            code: 400,
            title: "登录失效，请重新登录",
            data: err
        })
    })
})




// 修改个人信息
router.post('/set', function(req, res, next) {
    const nN = req.body.nickName;
    const tel = req.body.tel+"";
    const email = req.body.email;
    const hobby = req.body.hobby;
    const sex = req.body.sex-0;
    const birthday = req.body.birthday;
    let token = req.headers.token;
    // 验证token
    tools.verify(token).then(result=>{
        // 验证成功
        sql.set(user,{userId: result.userId},{$set:{
            nickName: nN,
            tel: tel,
            email: email,
            hobby: JSON.parse(hobby),
            sex: sex,
            birthday: birthday
        }}).then(()=>{
            res.send({
                code:1,
                titke:"修改个人信息成功",
                data:"NOT DATA"
            })
        })
    }).catch(err=>{
        // 验证失败
        res.send({
            code: 400,
            title: "登录失效，请重新登录",
            data: err
        })
    })
})


module.exports = router;
